#include "StdMsgQueue.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <signal.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/msg.h>


struct StdMsgQueue
{
    int msgID;
};

MsgQ *InitMsgQ(const char *pathName, int projID)
{
    MsgQ *q = (MsgQ*)malloc(sizeof(MsgQ));
    if(q == NULL)
        return NULL;

    key_t key = ftok("./",3);
    if(key < 0)
    {
        perror("ftok");
        return NULL;
    }

    q->msgID = msgget(key,IPC_CREAT | 0777);
    if(q->msgID < 0)
    {
        perror("msgget");
        free(q);
        return NULL;
    }
    return q;
}

void MsgQSend(MsgQ *q, void *ptr, size_t size)
{
    //发送消息
    msgsnd(q->msgID,ptr,size,0);
}

void MsgQRecv(MsgQ *q, void *ptr, size_t size,long type)
{
    //接收消息
    msgrcv(q->msgID,ptr,size,type,0);
}

void ClearMsQ(MsgQ *q)
{
    if(q == NULL)
        return ;
    
    msgctl(q->msgID,IPC_RMID,NULL);
}
